package com.yuan.weike.service;

import com.yuan.weike.model.User;
import com.yuan.weike.model.request.*;

import java.util.List;

/**
 * 用户服务接口
 */
public interface UserService {

    /**
     * 用户注册
     *
     * @param userRegisterRequest 用户注册请求
     * @return 用户ID
     */
    long userRegister(UserRegisterRequest userRegisterRequest);

    /**
     * 添加用户（仅管理员可用）
     *
     * @param userAddRequest 添加用户请求
     * @param loginUser      当前登录用户
     * @return 用户ID
     */
    long addUser(UserAddRequest userAddRequest, User loginUser);

    /**
     * 用户登录
     *
     * @param userLoginRequest 用户登录请求
     * @return 登录用户信息
     */
    User userLogin(UserLoginRequest userLoginRequest);

    /**
     * 获取当前登录用户
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    User getCurrentUser(long userId);

    /**
     * 更新用户信息
     *
     * @param userUpdateRequest 用户更新信息请求
     * @param loginUser         当前登录用户
     * @return 是否更新成功
     */
    boolean updateUserInfo(UserUpdateRequest userUpdateRequest, User loginUser);

    /**
     * 重置用户密码
     *
     * @param resetPasswordRequest 重置密码请求
     * @return 是否重置成功
     */
    boolean resetPassword(UserResetPasswordRequest resetPasswordRequest);

    /**
     * 管理员获取用户列表
     *
     * @param loginUser 当前登录用户
     * @return 用户列表
     */
    List<User> listUsers(User loginUser);

    /**
     * 管理员更新用户状态
     *
     * @param userId    用户ID
     * @param status    新状态
     * @param loginUser 当前登录用户
     * @return 是否更新成功
     */
    boolean updateUserStatus(long userId, int status, User loginUser);

    /**
     * 管理员删除用户
     *
     * @param userId    用户ID
     * @param loginUser 当前登录用户
     * @return 是否删除成功
     */
    boolean deleteUser(long userId, User loginUser);

    /**
     * 检查用户是否为管理员
     *
     * @param user 用户信息
     * @return 是否为管理员
     */
    boolean isAdmin(User user);
    
    /**
     * 统计用户总数
     *
     * @return 用户总数
     */
    int countUsers();
}